{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/mpbast0s/2025-2---PPGEE---INTRODU-O-AO-APRENDIZADO-DE-M-QUINA-/blob/main/codigo_aula3_representacao_do_modelo.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "40a2fd65",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "40a2fd65"
      },
      "source": [
        "# Representação do modelo"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b40d93f1",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "b40d93f1"
      },
      "source": [
        "## Objetivo\n",
        "\n",
        "- Aprender a implementar o modelo $f_{w,b} (x)$ para regressão linear com uma variável"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "8a4a7d49",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "8a4a7d49"
      },
      "source": [
        "## Ferramentas\n",
        "\n",
        "Nesse código, você usará:\n",
        "- NumPy, uma biblioteca popular para cálculos matriciais, etc\n",
        "- Matplotlib, uma biblioteca popular para gerar figuras com dados"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 207,
      "id": "e34b0245",
      "metadata": {
        "pycharm": {
          "name": "#%%\n"
        },
        "id": "e34b0245"
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "import random as rd"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5daf9ebe",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "5daf9ebe"
      },
      "source": [
        "# Definição do Problema\n",
        "\n",
        "Nesse código, você usará um exemplo de motivação baseado na previsão de tensão sobre um resistor.\n",
        "\n",
        "Usaremos para isso um conjunto de dados com apenas 2 amostras - um valor de corrente de 0.2 A que resultou numa tensão de 21 V e um valor de 4.5 A que resultou numa tensão de 430 V. Essas duas amostras de dados contituem nosso *conjunto de dados de treinamento*.\n",
         "\n",
    "| Corrente (A)     | Tensão (V) |\n",
    "| -----------------|------------|\n",
    "| 0.2              | 10.64975337|\n",
    "| 2.0              | 106.49753367|\n",
    "| 5.0              | 266.24383418|\n",
    "| 10.0             | 532.48766835|\n",
        "\n",
        "Queremos ajustar um modelo de regressão linear a partir desses dois pontos, para que seja possível então estimar a tensão sobre o resistor para outros valores de corrente.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "672e1429",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "672e1429"
      },
      "source": [
        "Rodar a célula de código abaixo para criar as variáveis `x_trein` e `y_trein`. Os dados são armazenados em NumPy arrays de uma dimensão."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 208,
      "id": "82453c24",
      "metadata": {
        "pycharm": {
          "name": "#%%\n"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "82453c24",
        "outputId": "40d20f36-550a-459f-9f65-5f3f3ca8d98c"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "x_trein = [ 0.2  2.   5.  10. ]\n",
            "y_trein = [ 10.64975337 106.49753367 266.24383418 532.48766835]\n"
          ]
        }
      ],
      "source": [
        "# x_train é a variável de entrada (corrente em Àmperes)\n",
        "# y_train é a variável alvo (tensão em Volts)\n",
        "#resistor\n",
        "x_trein = np.array([0.2, 2, 5, 10])\n",
        "y_trein = x_trein*50.0*(1+rd.uniform(-0.1,0.1))\n",
        "print(f\"x_trein = {x_trein}\")\n",
        "print(f\"y_trein = {y_trein}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f9da5a79",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "f9da5a79"
      },
      "source": [
        "### Número de amostras de treinamento `m`\n",
        "\n",
        "Usaremos `m` para denotar o número de amostras de treinamento. Numpy arrays têm o parâmetro `.shape`. Nesse contexto, `x_train.shape` retorna uma tupla com uma entrada para cada dimensão. `x_train.shape[0]` é o comprimento da array (primeiro elemento presente na tupla), conforme mostrado abaixo."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 209,
      "id": "a2edbe21",
      "metadata": {
        "pycharm": {
          "name": "#%%\n"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "a2edbe21",
        "outputId": "a3bde47a-0672-4f96-cfcf-4eebc6cb036c"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "x_trein.shape: (4,)\n",
            "O número de amostras de treinamento é: 4\n"
          ]
        }
      ],
      "source": [
        "# m é o número de amostras de treinamento\n",
        "print(f\"x_trein.shape: {x_trein.shape}\")\n",
        "m = x_trein.shape[0]\n",
        "print(f\"O número de amostras de treinamento é: {m}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "d673a22b",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "d673a22b"
      },
      "source": [
        "É possível também utilizar o função em Python `len()`, conforme abaixo."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 210,
      "id": "edeb666a",
      "metadata": {
        "pycharm": {
          "name": "#%%\n"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "edeb666a",
        "outputId": "d14a36bb-b8b9-4b5f-eb34-533deec8ca30"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "O número de amostras de treinamento é: 4\n"
          ]
        }
      ],
      "source": [
        "m = len(x_trein)\n",
        "print(f\"O número de amostras de treinamento é: {m}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f2546b57",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "f2546b57"
      },
      "source": [
        "### Amostra de treinamento `x_i, y_i`\n",
        "\n",
        "Usaremos (x$^{(i)}$, y$^{(i)}$) para denotar a $i-$ésima amostra de treinamento. Uma vez que a Linguagem Python tem 0 como índice inicial, (x$^{(0)}$, y$^{(0)}$) é (0.2, 21.0) e (x$^{(1)}$, y$^{(1)}$) é (4.5, 430.0).\n",
        "\n",
        "A i-ésima posição da Numpy array `x_trein` é acessada utilizando o comando `x_trein[i]`, onde `i` denota a posição desejada.\n",
        "\n",
        "\n",
        "Veja o código abaixo."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 211,
      "id": "3e5655af",
      "metadata": {
        "pycharm": {
          "name": "#%%\n"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "3e5655af",
        "outputId": "b2a85e06-e98a-48cd-bb24-c24ccc530968"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "(x^(2), y^(2)) = (5.0, 266.24383417540156)\n"
          ]
        }
      ],
      "source": [
        "i = 2 # Mude esse valor para 1 para ver (x^1, y^1)\n",
        "\n",
        "x_i = x_trein[i]\n",
        "y_i = y_trein[i]\n",
        "print(f\"(x^({i}), y^({i})) = ({x_i}, {y_i})\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5b3cc549",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "5b3cc549"
      },
      "source": [
        "### Plotando os dados (gerando uma figura que mostra os dados)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "cc8b13c7",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "cc8b13c7"
      },
      "source": [
        "Você pode plotar os dois pontos usando a função `scatter()` presente na biblioteca `matplotlib`, conforme mostrado abaixo.\n",
        "- Os argumentos `marker` e `c` mostram os pontos como 'x' vermelhos (o padrão são pontos azuis).\n",
        "\n",
        "Você pode usar outras funções da biblioteca `matplotlib` para definir o título e os rótulos dos eixos"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 212,
      "id": "254e10fd",
      "metadata": {
        "pycharm": {
          "name": "#%%\n"
        },
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 474
        },
        "id": "254e10fd",
        "outputId": "c44c26c9-21b1-4514-9c04-6da7a5c98ef9"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHJCAYAAABjZPjUAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAR0hJREFUeJzt3XlcVnX+///nBcq+iQpI4oJZinuaSppWLmhmOdlk5bhSmmGklJXfMZcWLZspyzHNyiUny8rpk2MTiqaWu2mWuW8JpoBlLG6g8P79wY+rrnCBS+CC4+N+u123m+f9PsvrnMu8np3zPufYjDFGAAAAFuXm6gIAAADKEmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHsJB169YpNDRUzZo10+bNmzV58mSNGjXK1WU5bd68ebLZbPr2229dXYqlrV69WjabTatXr3Z1KUCZqOLqAoDKxmazFWu+VatW6bbbbivbYv7kjTfeUK9eveTu7q6OHTuqatWqWrVqVbnWgGvH5MmTFRUVpT59+ri6FOCyCDtACS1YsMBh+v3331dSUlKR9saNG5dnWZKkadOmqVq1avL29tbUqVNVpUoV+fv7l3sdqFw6deqks2fPysPDo0TLTZ48Wffddx9hBxUeYQcoob/97W8O0xs3blRSUlKRdlcIDw+3/7latWourMT1jDE6d+6cvL29XV1KqSqL/XJzc5OXl1epre9qnD59Wr6+vq4uAxbDmB2gDOTn52vatGlq0qSJvLy8FBoaquHDh+u3335zmK9evXq66667tHbtWrVt21ZeXl6KjIzU+++/7zDf+fPnNWnSJDVs2FBeXl6qXr26OnbsqKSkJIf5vvrqK916663y9fVVUFCQ7rnnHu3evbtIfT///LOGDh2q0NBQeXp6qkmTJpozZ06R+aZPn64mTZrIx8dH1apVU5s2bbRw4cIr7n9xlvvuu+/Us2dPBQQEyM/PT126dNHGjRsvur4zZ85o+PDhql69ugICAjRw4MBLHstly5apTZs28vb21ttvvy1JysjI0KhRoxQRESFPT09df/31euWVV5Sfn3/FfbHZbJo4cWKR9nr16mnw4MH26cLxRWvXrlV8fLxq1qypoKAgDR8+XLm5ucrIyNDAgQNVrVo1VatWTU8//bSMMVfcfmns10cffaTWrVvL399fAQEBatasmd544w17/8XG7Ozfv199+/ZVWFiYvLy8VLt2bT3wwAPKzMy0H5fTp09r/vz5stlsstlsDsejON9v4TFbs2aNHnvsMYWEhKh27dpXPCZASXFmBygDw4cP17x58zRkyBDFx8fr8OHD+te//qXvvvtO69atU9WqVe3zHjhwQPfdd59iY2M1aNAgzZkzR4MHD1br1q3VpEkTSdLEiRM1ZcoUPfzww2rbtq2ysrL07bffatu2berWrZskacWKFerZs6ciIyM1ceJEnT17VtOnT1eHDh20bds21atXT5KUlpam9u3by2azaeTIkapZs6a+/PJLxcbGKisryz6g+Z133lF8fLzuu+8+PfHEEzp37px++OEHbdq0SQ899NAl9704y+3cuVO33nqrAgIC9PTTT6tq1ap6++23ddttt2nNmjVq166dwzpHjhypoKAgTZw4UXv37tXMmTN15MgR+490ob179+rBBx/U8OHD9cgjj+jGG2/UmTNn1LlzZ/38888aPny46tSpo/Xr12vs2LE6fvy4pk2bdrVft4PHH39cYWFhmjRpkjZu3KjZs2crKChI69evV506dTR58mT973//06uvvqqmTZtq4MCBV1zn1exXUlKSHnzwQXXp0kWvvPKKJGn37t1at26dnnjiiYtuLzc3VzExMcrJybHvz88//6ylS5cqIyNDgYGBWrBggf3v47BhwyRJDRo0kFTy7/exxx5TzZo1NX78eJ0+fdrZQw9cmgFwVeLi4swf/1P65ptvjCTzwQcfOMyXmJhYpL1u3bpGkvn666/tbenp6cbT09M8+eST9rYWLVqYXr16XbaOli1bmpCQEPPrr7/a277//nvj5uZmBg4caG+LjY01tWrVMr/88ovD8g888IAJDAw0Z86cMcYYc88995gmTZoU5xA4KM5yffr0MR4eHubgwYP2tmPHjhl/f3/TqVMne9vcuXONJNO6dWuTm5trb586daqRZD7//HN7W+GxTExMdNjWCy+8YHx9fc2+ffsc2p999lnj7u5ukpOTL1urJDNhwoQi7XXr1jWDBg0qUmtMTIzJz8+3t0dHRxubzWYeffRRe9uFCxdM7dq1TefOnS+77dLYryeeeMIEBASYCxcuXHIbq1atMpLMqlWrjDHGfPfdd0aS+eSTTy5bm6+vr8MxKFTS77djx46XrQ+4WlzGAkrZJ598osDAQHXr1k2//PKL/dO6dWv5+fkVuTsqKipKt956q326Zs2auvHGG3Xo0CF7W1BQkHbu3Kn9+/dfdJvHjx/X9u3bNXjwYAUHB9vbmzdvrm7duul///ufpILxHosXL1bv3r1ljHGoLyYmRpmZmdq2bZt9m0ePHtWWLVtKtP9XWi4vL0/Lly9Xnz59FBkZaW+vVauWHnroIa1du1ZZWVkOywwbNszhbNiIESNUpUoV+34Vql+/vmJiYhzaPvnkE916662qVq2aw/527dpVeXl5+vrrr0u0f1cSGxvrcLapXbt2MsYoNjbW3ubu7q42bdo4fMeXczX7FRQUpNOnTxe55Hk5gYGBkqRly5bpzJkzxV5Ocu77feSRR+Tu7l6i7QAlQdgBStn+/fuVmZmpkJAQ1axZ0+Fz6tQppaenO8xfp06dIuuoVq2aw5iU559/XhkZGbrhhhvUrFkzjRkzRj/88IO9/8iRI5KkG2+8sci6GjdurF9++UWnT5/WiRMnlJGRodmzZxepbciQIZJkr++ZZ56Rn5+f2rZtq4YNGyouLk7r1q274v5fabkTJ07ozJkzl6w1Pz9fKSkpDu0NGzZ0mPbz81OtWrX0008/ObTXr1+/yDr379+vxMTEIvvbtWtXh/0tLX/+PguDQ0RERJH2P487upSr2a/HHntMN9xwg3r27KnatWtr6NChSkxMvOL2EhIS9O6776pGjRqKiYnRjBkz7ON1LseZ7/di+weUJsbsAKUsPz9fISEh+uCDDy7aX7NmTYfpS/0frfnD4NVOnTrp4MGD+vzzz7V8+XK9++67ev311zVr1iw9/PDDJapNKrijbNCgQRedp3nz5pIKfpj27t2rpUuXKjExUYsXL9Zbb72l8ePHa9KkSZfchrPLlYaL3aGUn5+vbt266emnn77oMjfccINT28rLy7to+6W+z4u1m2IMUJaubr9CQkK0fft2LVu2TF9++aW+/PJLzZ07VwMHDtT8+fMvuc1//vOfGjx4sP3vXHx8vKZMmaKNGzeW+iBiq90xh4qHsAOUsgYNGmjFihXq0KFDqf4jHhwcrCFDhmjIkCE6deqUOnXqpIkTJ+rhhx9W3bp1JRUMZP2zPXv2qEaNGvL19ZWXl5f8/f2Vl5dnPwNwOb6+vurXr5/69eun3Nxc3XvvvXrppZc0duzYy96qfLnlatasKR8fn0vW6ubmVuQsyP79+3X77bfbp0+dOqXjx4/rzjvvvOI+NGjQQKdOnSrW/l5MtWrVlJGR4dCWm5ur48ePO7W+0lKS/fLw8FDv3r3Vu3dv5efn67HHHtPbb7+t5557Ttdff/0ll2vWrJmaNWumcePGaf369erQoYNmzZqlF198UdLFH7DpzPcLlDUuYwGl7P7771deXp5eeOGFIn0XLlwo8sNZHL/++qvDtJ+fn66//nrl5ORIKhgP0bJlS82fP99h/T/++KOWL19uDwXu7u7q27evFi9erB9//LHIdk6cOHHJbXp4eCgqKkrGGJ0/f77Ytf55OXd3d3Xv3l2ff/65w2WotLQ0LVy4UB07dlRAQIDDOmbPnu2wzZkzZ+rChQvq2bPnJesodP/992vDhg1atmxZkb6MjAxduHDhsss3aNCgyLie2bNnX/LMTnkp7n79+ftwc3Ozn70r/PvzZ1lZWUWOS7NmzeTm5uawjK+vb5G/z858v0BZ48wOUMo6d+6s4cOHa8qUKdq+fbu6d++uqlWrav/+/frkk0/0xhtv6L777ivROqOionTbbbepdevWCg4O1rfffqtPP/1UI0eOtM/z6quvqmfPnoqOjlZsbKz91vPAwECH58S8/PLLWrVqldq1a6dHHnlEUVFROnnypLZt26YVK1bo5MmTkqTu3bsrLCxMHTp0UGhoqHbv3q1//etf6tWr12Wfylyc5V588UUlJSWpY8eOeuyxx1SlShW9/fbbysnJ0dSpU4usMzc3V126dNH999+vvXv36q233lLHjh119913X/HYjRkzRkuWLNFdd91lv6X/9OnT2rFjhz799FP99NNPqlGjxiWXf/jhh/Xoo4+qb9++6tatm77//nstW7bsssuUh+Lu18MPP6yTJ0/qjjvuUO3atXXkyBFNnz5dLVu2vORTvr/66iuNHDlSf/3rX3XDDTfowoULWrBggT0sF2rdurVWrFih1157TeHh4apfv77atWtX4u8XKHMuvBMMsIQ/33peaPbs2aZ169bG29vb+Pv7m2bNmpmnn37aHDt2zD5P3bp1L3pLeefOnR1uS37xxRdN27ZtTVBQkPH29jaNGjUyL730ksPt2MYYs2LFCtOhQwfj7e1tAgICTO/evc2uXbuKrD8tLc3ExcWZiIgIU7VqVRMWFma6dOliZs+ebZ/n7bffNp06dTLVq1c3np6epkGDBmbMmDEmMzPzssejuMtt27bNxMTEGD8/P+Pj42Nuv/12s379eod5Cm9NXrNmjRk2bJipVq2a8fPzM/3793e4xf5yx9IYY7Kzs83YsWPN9ddfbzw8PEyNGjXMLbfcYv7xj38UOYZ/lpeXZ5555hlTo0YN4+PjY2JiYsyBAwcueev5li1bHJafMGGCkWROnDjh0D5o0CDj6+t72W2Xxn59+umnpnv37iYkJMR4eHiYOnXqmOHDh5vjx4/b1/PnW88PHTpkhg4daho0aGC8vLxMcHCwuf32282KFSsctr9nzx7TqVMn4+3tbSQ5HI+SfL9/PmZAabMZU8wRcgAAAJUQY3YAAIClEXYAAIClEXYAAIClEXYAAIClEXYAAIClEXYAAICl8VBBFbxj5tixY/L397/o488BAEDFY4xRdna2wsPD5eZ26fM3hB1Jx44d410tAABUUikpKZd9QS1hR7I/wj4lJYV3tgAAUElkZWUpIiLisq+wkQg7kn5/c29AQABhBwCASuZKQ1AYoAwAACyNsAMAACyNsAMAACyNsAMAACyNsAMAACyNsAMAACyNsAMAACyNsAMAACyNsAMAACyNsAMAAEpXZqZ09OjF+44eLegvR4QdAABQejIzpR49pM6dpZQUx76UlIL2Hj3KNfAQdgAAQOnJzpbS06VDh6Tbbvs98KSkFEwfOlTQn51dbiURdgAAQOmpXVtavVqKjPw98Kxf/3vQiYws6K9du9xK4q3nAACgdEVEFASawoDToUNBe2HQiYgo13I4swMAAEpfRIS0YIFj24IF5R50JMIOAAAoCykp0oABjm0DBhQdtFwOCDsAAKB0/XEwcmSktG6d4xiecg48hB0AAFB6jh4tOhj5lluKDlq+1HN4ygADlAEAQOnx95dCQgr+/MfByH8ctBwSUjBfOSHsAACA0hMYKCUmFjxH58+3l0dESGvWFASdwMByK4mwAwAASldg4KXDTDk+X6cQY3YAAIClEXYAAIClEXYAAIClEXYAAIClEXYAAIClEXYAAIClEXYAAIClEXYAAIClEXYAAIClEXYAAICluTTsTJw4UTabzeHTqFEje/+5c+cUFxen6tWry8/PT3379lVaWprDOpKTk9WrVy/5+PgoJCREY8aM0YULF8p7VwAAQAXl8ndjNWnSRCtWrLBPV6nye0mjR4/WF198oU8++USBgYEaOXKk7r33Xq1bt06SlJeXp169eiksLEzr16/X8ePHNXDgQFWtWlWTJ08u930BAAAVj8vDTpUqVRQWFlakPTMzU++9954WLlyoO+64Q5I0d+5cNW7cWBs3blT79u21fPly7dq1SytWrFBoaKhatmypF154Qc8884wmTpwoDw+P8t4dAABQwbh8zM7+/fsVHh6uyMhI9e/fX8nJyZKkrVu36vz58+ratat93kaNGqlOnTrasGGDJGnDhg1q1qyZQkND7fPExMQoKytLO3fuvOQ2c3JylJWV5fABAADW5NKw065dO82bN0+JiYmaOXOmDh8+rFtvvVXZ2dlKTU2Vh4eHgoKCHJYJDQ1VamqqJCk1NdUh6BT2F/ZdypQpUxQYGGj/RERElO6OAQCACsOll7F69uxp/3Pz5s3Vrl071a1bVx9//LG8vb3LbLtjx45VQkKCfTorK4vAAwCARbn8MtYfBQUF6YYbbtCBAwcUFham3NxcZWRkOMyTlpZmH+MTFhZW5O6swumLjQMq5OnpqYCAAIcPAACwpgoVdk6dOqWDBw+qVq1aat26tapWraqVK1fa+/fu3avk5GRFR0dLkqKjo7Vjxw6lp6fb50lKSlJAQICioqLKvX4AAFDxuPQy1lNPPaXevXurbt26OnbsmCZMmCB3d3c9+OCDCgwMVGxsrBISEhQcHKyAgAA9/vjjio6OVvv27SVJ3bt3V1RUlAYMGKCpU6cqNTVV48aNU1xcnDw9PV25awAAoIJwadg5evSoHnzwQf3666+qWbOmOnbsqI0bN6pmzZqSpNdff11ubm7q27evcnJyFBMTo7feesu+vLu7u5YuXaoRI0YoOjpavr6+GjRokJ5//nlX7RIAAKhgbMYY4+oiXC0rK0uBgYHKzMxk/A4AAJVEcX+/K9SYHQAAgNJG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZG2AEAAJZWYcLOyy+/LJvNplGjRtnbzp07p7i4OFWvXl1+fn7q27ev0tLSHJZLTk5Wr1695OPjo5CQEI0ZM0YXLlwo5+oBAEBFVSHCzpYtW/T222+refPmDu2jR4/Wf//7X33yySdas2aNjh07pnvvvdfen5eXp169eik3N1fr16/X/PnzNW/ePI0fP768dwEAAFRQLg87p06dUv/+/fXOO++oWrVq9vbMzEy99957eu2113THHXeodevWmjt3rtavX6+NGzdKkpYvX65du3bp3//+t1q2bKmePXvqhRde0IwZM5Sbm+uqXQIAABWIy8NOXFycevXqpa5duzq0b926VefPn3dob9SokerUqaMNGzZIkjZs2KBmzZopNDTUPk9MTIyysrK0c+fOS24zJydHWVlZDh8AAGBNVVy58Y8++kjbtm3Tli1bivSlpqbKw8NDQUFBDu2hoaFKTU21z/PHoFPYX9h3KVOmTNGkSZOusnoAAFAZuOzMTkpKip544gl98MEH8vLyKtdtjx07VpmZmfZPSkpKuW4fAACUH5eFna1btyo9PV033XSTqlSpoipVqmjNmjV68803VaVKFYWGhio3N1cZGRkOy6WlpSksLEySFBYWVuTurMLpwnkuxtPTUwEBAQ4fAABgTS4LO126dNGOHTu0fft2+6dNmzbq37+//c9Vq1bVypUr7cvs3btXycnJio6OliRFR0drx44dSk9Pt8+TlJSkgIAARUVFlfs+AQCAisdlY3b8/f3VtGlThzZfX19Vr17d3h4bG6uEhAQFBwcrICBAjz/+uKKjo9W+fXtJUvfu3RUVFaUBAwZo6tSpSk1N1bhx4xQXFydPT89y3ycAAFDxuHSA8pW8/vrrcnNzU9++fZWTk6OYmBi99dZb9n53d3ctXbpUI0aMUHR0tHx9fTVo0CA9//zzLqwaAABUJDZjjHF1Ea6WlZWlwMBAZWZmMn4HAIBKori/3y5/zg4AAEBZIuwAAABLI+wAAABLI+wAAABLI+wAAABLI+wAAABLI+wAAABLI+wAAABLI+wAAABLI+wAAABLI+wAAABLI+wAAABLI+wAAABLI+wAAABLI+wAAABLI+wAAABLq+LMQjk5Odq0aZOOHDmiM2fOqGbNmmrVqpXq169f2vUBAABclRKFnXXr1umNN97Qf//7X50/f16BgYHy9vbWyZMnlZOTo8jISA0bNkyPPvqo/P39y6pmAACAYiv2Zay7775b/fr1U7169bR8+XJlZ2fr119/1dGjR3XmzBnt379f48aN08qVK3XDDTcoKSmpLOsGAAAolmKf2enVq5cWL16sqlWrXrQ/MjJSkZGRGjRokHbt2qXjx4+XWpEAAADOshljjKuLcLWsrCwFBgYqMzNTAQEBri4HAAAUQ3F/v526GyslJUVHjx61T2/evFmjRo3S7NmznVkdAABAmXEq7Dz00ENatWqVJCk1NVXdunXT5s2b9fe//13PP/98qRYIAABwNZwKOz/++KPatm0rSfr444/VtGlTrV+/Xh988IHmzZtXmvUBAABcFafCzvnz5+Xp6SlJWrFihe6++25JUqNGjRiYDAAAKhSnwk6TJk00a9YsffPNN0pKSlKPHj0kSceOHVP16tVLtUAAAICr4VTYeeWVV/T222/rtttu04MPPqgWLVpIkpYsWWK/vAUAAFAROH3reV5enrKyslStWjV7208//SRfX1/VrFmz1AosD9x6DgBA5VOmt57fcccdys7Odgg6khQcHKx+/fo5s0oAAIAy4VTYWb16tXJzc4u0nzt3Tt98881VFwUAAFBaSvQi0B9++MH+5127dik1NdU+nZeXp8TERF133XWlVx0AAMBVKlHYadmypWw2m2w2m+64444i/d7e3po+fXqpFQcAAHC1ShR2Dh8+LGOMIiMjtXnzZoeByB4eHgoJCZG7u3upFwkAAOCsEoWdunXrSpLy8/PLpBgAAIDSVuyws2TJkmKvtPCJygAAAK5W7LDTp0+fYs1ns9mUl5fnbD0AAAClqthhh0tXAACgMnLqOTsAAACVhdNhZ82aNerdu7euv/56XX/99br77rt5oCAAAKhwnAo7//73v9W1a1f5+PgoPj5e8fHx8vb2VpcuXbRw4cLSrhEAAMBpTr0ItHHjxho2bJhGjx7t0P7aa6/pnXfe0e7du0utwPLAi0ABAKh8yvRFoIcOHVLv3r2LtN999906fPiwM6sEAAAoE06FnYiICK1cubJI+4oVKxQREXHVRQEAAJSWEj1BudCTTz6p+Ph4bd++Xbfccoskad26dZo3b57eeOONUi0QAADgapQo7Jw8eVLBwcEaMWKEwsLC9M9//lMff/yxpIJxPIsWLdI999xTJoUCAAA4o0RhJzw8XH369FFsbKz+8pe/6C9/+UtZ1QUAAFAqSjRm55133tGJEyfUo0cP1atXTxMnTtSRI0fKqjYAAICrVqKwM2DAAK1cuVIHDhzQoEGDNH/+fDVo0EDdunXTokWLlJubW1Z1AgAAOMWpu7Hq16+vSZMm6fDhw0pMTFRISIiGDh2qWrVqKT4+vrRrBAAAcJpTDxW8mMWLF2vYsGHKyMiodG8956GCAABUPsX9/Xbq1vNCR44c0dy5czV//nylpKTo9ttvV2xs7NWsEgAAoFSVOOzk5ORo8eLFmjNnjlavXq3rrrtOgwcP1pAhQ1SvXr0yKBEAAMB5JQo7jz32mD766COdOXNG99xzj/73v/+pW7dustlsZVUfAADAVSnRAOW1a9dqwoQJ+vnnn7Vo0SJ17979qoLOzJkz1bx5cwUEBCggIEDR0dH68ssv7f3nzp1TXFycqlevLj8/P/Xt21dpaWkO60hOTlavXr3k4+OjkJAQjRkzRhcuXHC6JgAAYC0lOrPzww8/lOrGa9eurZdfflkNGzaUMUbz58/XPffco++++05NmjTR6NGj9cUXX+iTTz5RYGCgRo4cqXvvvVfr1q2TJOXl5alXr14KCwvT+vXrdfz4cQ0cOFBVq1bV5MmTS7VWAABQOZXa3VilJTg4WK+++qruu+8+1axZUwsXLtR9990nSdqzZ48aN26sDRs2qH379vryyy9111136dixYwoNDZUkzZo1S88884xOnDghDw+PYm2Tu7EAAKh8ivv77dRzdspCXl6ePvroI50+fVrR0dHaunWrzp8/r65du9rnadSokerUqaMNGzZIkjZs2KBmzZrZg44kxcTEKCsrSzt37iz3fQAAABXPVd16Xhp27Nih6OhonTt3Tn5+fvrss88UFRWl7du3y8PDQ0FBQQ7zh4aGKjU1VZKUmprqEHQK+wv7LiUnJ0c5OTn26aysrFLaGwAAUNG4/MzOjTfeqO3bt2vTpk0aMWKEBg0apF27dpXpNqdMmaLAwED7JyIioky3BwAAXMfpMzvnzp3TDz/8oPT0dOXn5zv03X333cVej4eHh66//npJUuvWrbVlyxa98cYb6tevn3Jzc5WRkeFwdictLU1hYWGSpLCwMG3evNlhfYV3axXOczFjx45VQkKCfTorK4vAAwCARTkVdhITEzVw4ED98ssvRfpsNttVvS4iPz9fOTk5at26tapWraqVK1eqb9++kqS9e/cqOTlZ0dHRkqTo6Gi99NJLSk9PV0hIiCQpKSlJAQEBioqKuuQ2PD095enp6XSNAACg8nAq7Dz++OP661//qvHjxxcZM1MSY8eOVc+ePVWnTh1lZ2dr4cKFWr16tZYtW6bAwEDFxsYqISFBwcHBCggI0OOPP67o6Gi1b99ektS9e3dFRUVpwIABmjp1qlJTUzVu3DjFxcURZgAAgCQnw05aWpoSEhKuKuhIUnp6ugYOHKjjx48rMDBQzZs317Jly9StWzdJ0uuvvy43Nzf17dtXOTk5iomJ0VtvvWVf3t3dXUuXLtWIESMUHR0tX19fDRo0SM8///xV1QUAAKzDqefsDB06VB06dLDMSz95zg4AAJVPcX+/nQo7Z86c0V//+lfVrFlTzZo1U9WqVR364+PjS16xCxF2AACofIr7++3UZawPP/xQy5cvl5eXl1avXu3wfiybzVbpwg4AALAup8LO3//+d02aNEnPPvus3Nxc/qgeAACAS3IqqeTm5qpfv34EHQAAUOE5lVYGDRqkRYsWlXYtAAAApc6py1h5eXmaOnWqli1bpubNmxcZoPzaa6+VSnEAAABXy6mws2PHDrVq1UqS9OOPPzr0/XGwMgAAgKs5FXZWrVpV2nUAAACUiasaYXzgwAEtW7ZMZ8+elSQ58cgeAACAMuVU2Pn111/VpUsX3XDDDbrzzjt1/PhxSVJsbKyefPLJUi0QAADgajgVdkaPHq2qVasqOTlZPj4+9vZ+/fopMTGx1IoDgCvKzJSOHr1439GjBf0ArmlOjdlZvny5li1bptq1azu0N2zYUEeOHCmVwgDgijIzpR49pPR0afVqKSLi976UFOm226SQECkxUQoMdFWVAFzMqTM7p0+fdjijU+jkyZPy9PS86qIAoFiyswuCzqFDBcEmJaWgvTDoHDpU0J+d7coqAbiYU2Hn1ltv1fvvv2+fttlsys/P19SpU3X77beXWnEAcFm1axec0YmM/D3wrF//e9CJjCzo/9NZaADXFqcuY02dOlVdunTRt99+q9zcXD399NPauXOnTp48qXXr1pV2jQBwaRERBYGmMOB06FDQXhh0/nhpC8A1yakzO02bNtW+ffvUsWNH3XPPPTp9+rTuvfdefffdd2rQoEFp1wgAlxcRIS1Y4Ni2YAFBB4AkyWZ4OI6ysrIUGBiozMxMBQQEuLocACX1xzE6hTizA1hecX+/i31mJzk5uUQF/PzzzyWaHwCc8segExkprVvnOIancNAygGtWscPOzTffrOHDh2vLli2XnCczM1PvvPOOmjZtqsWLF5dKgQBwSUePFh2MfMstRQctX+o5PACuCcUeoLxr1y699NJL6tatm7y8vNS6dWuFh4fLy8tLv/32m3bt2qWdO3fqpptu0tSpU3XnnXeWZd0AIPn7FzxHR3K8ZPXHQcshIQXzAbhmlXjMztmzZ/XFF19o7dq1OnLkiM6ePasaNWqoVatWiomJUdOmTcuq1jLDmB2gEsvMLHiOzsVuLz96tCDo8EBBwJKK+/vNAGURdgAAqIxKfYAyAABAZUTYAQAAlkbYAQAAlkbYAQAAlkbYAQAAlubUi0Al6eDBg5o2bZp2794tSYqKitITTzzBu7EAAECF4tSZnWXLlikqKkqbN29W8+bN1bx5c23atElNmjRRUlJSadcIAADgNKees1P4AMGXX37Zof3ZZ5/V8uXLtW3btlIrsDzwnB0AACqfMn3Ozu7duxUbG1ukfejQodq1a5czqwQAACgTToWdmjVravv27UXat2/frpDC99QAAABUAE4NUH7kkUc0bNgwHTp0SLfccoskad26dXrllVeUkJBQqgUCAABcDafG7BhjNG3aNP3zn//UsWPHJEnh4eEaM2aM4uPjZbPZSr3QssSYHQAAKp9yexFodna2JMnf3/9qVuNShB0AACqf4v5+O/2cnUKVOeQAAADrczrsfPrpp/r444+VnJys3Nxch77Kdus5AACwrmLfjXXXXXfpiy++kCS9+eabGjJkiEJDQ/Xdd9+pbdu2ql69ug4dOqSePXuWWbEAAAAlVeyw849//EPx8fGSpLfeekuzZ8/W9OnT5eHhoaefflpJSUmKj49XZmZmmRULAABQUsUOO6+99pr69esnSUpOTrbfcu7t7W0fpDxgwAB9+OGHZVAmAACAc4oddv7zn//o+uuvlySFhYXp5MmTkqQ6depo48aNkqTDhw/rKm/uAgAAKFXFDjtLly7VoUOHJEl33HGHlixZIkkaMmSIRo8erW7duqlfv376y1/+UjaVAgAAOMGp5+zk5+crPz9fVaoU3Mz10Ucfaf369WrYsKGGDx8uDw+PUi+0LPGcHQAAKp9ye6igFRB2AACofMr0reeJiYlau3atfXrGjBlq2bKlHnroIf3222/OrBIAAKBMOBV2xowZo6ysLEnSjh07lJCQoDvvvFOHDx/mRaAAAKBCceoJyocPH1ZUVJQkafHixerdu7cmT56sbdu26c477yzVAgEAAK6GU2d2PDw8dObMGUnSihUr1L17d0lScHCw/YwPAABAReDUmZ2OHTsqISFBHTp00ObNm7Vo0SJJ0r59+1S7du1SLRAAAOBqOHVm51//+peqVKmiTz/9VDNnztR1110nSfryyy/Vo0ePUi0QAADganDrubj1HACAyqi4v99OXcaSCh4seODAAaWnpys/P9+hr1OnTs6uFgAAoFQ5FXY2btyohx56SEeOHCnyLiybzaa8vLxSKQ4AAOBqORV2Hn30UbVp00ZffPGFatWqJZvNVtp1AQAAlAqnBijv379fkydPVuPGjRUUFKTAwECHT3FNmTJFN998s/z9/RUSEqI+ffpo7969DvOcO3dOcXFxql69uvz8/NS3b1+lpaU5zJOcnKxevXrJx8dHISEhGjNmjC5cuODMrgEAAItxKuy0a9dOBw4cuOqNr1mzRnFxcdq4caOSkpJ0/vx5de/eXadPn7bPM3r0aP33v//VJ598ojVr1ujYsWO699577f15eXnq1auXcnNztX79es2fP1/z5s3T+PHjr7o+AABQ+Tl1N9Znn32mcePGacyYMWrWrJmqVq3q0N+8eXOnijlx4oRCQkK0Zs0aderUSZmZmapZs6YWLlyo++67T5K0Z88eNW7cWBs2bFD79u315Zdf6q677tKxY8cUGhoqSZo1a5aeeeYZnThxolhvYOduLAAAKp8yvRurb9++kqShQ4fa22w2m4wxVzVAOTMzU1LBk5glaevWrTp//ry6du1qn6dRo0aqU6eOPexs2LBBzZo1swcdSYqJidGIESO0c+dOtWrVqsh2cnJylJOTY5/mqc8AAFiX0+/GKm35+fkaNWqUOnTooKZNm0qSUlNT5eHhoaCgIId5Q0NDlZqaap/nj0GnsL+w72KmTJmiSZMmlfIeAACAisipsFO3bt3SrkNxcXH68ccftXbt2lJf95+NHTvW4e3sWVlZioiIKPPtAgCA8ufUAGVJWrBggTp06KDw8HAdOXJEkjRt2jR9/vnnJV7XyJEjtXTpUq1atcrh3VphYWHKzc1VRkaGw/xpaWkKCwuzz/Pnu7MKpwvn+TNPT08FBAQ4fAAAgDU5FXZmzpyphIQE3XnnncrIyLCP0QkKCtK0adOKvR5jjEaOHKnPPvtMX331lerXr+/Q37p1a1WtWlUrV660t+3du1fJycmKjo6WJEVHR2vHjh1KT0+3z5OUlKSAgABFRUU5s3sAAMBCnAo706dP1zvvvKO///3vcnd3t7e3adNGO3bsKPZ64uLi9O9//1sLFy6Uv7+/UlNTlZqaqrNnz0qSAgMDFRsbq4SEBK1atUpbt27VkCFDFB0drfbt20uSunfvrqioKA0YMEDff/+9li1bpnHjxikuLk6enp7O7B4AALAQpwcoX+wuJ09PT4dn5FzJzJkzJUm33XabQ/vcuXM1ePBgSdLrr78uNzc39e3bVzk5OYqJidFbb71ln9fd3V1Lly7ViBEjFB0dLV9fXw0aNEjPP/98yXcMAABYjlNhp379+tq+fXuRgcqJiYlq3LhxsddTnEf8eHl5acaMGZoxY8Yl56lbt67+97//FXu7AADg2lGisPP888/rqaeeUkJCguLi4nTu3DkZY7R582Z9+OGHmjJlit59992yqhUAAKDESvQEZXd3dx0/flwhISH64IMPNHHiRB08eFCSFB4erkmTJik2NrbMii0rPEEZAIDKp7i/3yUKO25ubkpNTVVISIi97cyZMzp16pRDW2VD2AEAoPIps9dF2Gw2h2kfHx/5+PiUvEIAAIByUOKwc8MNNxQJPH928uRJpwsCAAAoTSUOO5MmTVJgYGBZ1AIAAFDqShx2HnjggUo9PgcAAFxbSvQE5StdvgIAAKhoShR2SnDjFgAAQIVQostY+fn5ZVUHAABAmXDqRaAAAACVBWEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHFVdmpnT06MX7jh4t6AcA4AoIO6iYMjOlHj2kzp2llBTHvpSUgvYePQg8AIArIuygYsrOltLTpUOHpNtu+z3wpKQUTB86VNCfne3KKgEAlQBhBxVT7drS6tVSZOTvgWf9+t+DTmRkQX/t2q6tEwBQ4VVxdQHAJUVEFASawoDToUNBe2HQiYhwYXEAgMrCpWd2vv76a/Xu3Vvh4eGy2Wz6v//7P4d+Y4zGjx+vWrVqydvbW127dtX+/fsd5jl58qT69++vgIAABQUFKTY2VqdOnSrHvUCZioiQFixwbFuwgKADACg2l4ad06dPq0WLFpoxY8ZF+6dOnao333xTs2bN0qZNm+Tr66uYmBidO3fOPk///v21c+dOJSUlaenSpfr66681bNiw8toFlLWUFGnAAMe2AQOKDloGAOASbMYY4+oiJMlms+mzzz5Tnz59JBWc1QkPD9eTTz6pp556SpKUmZmp0NBQzZs3Tw888IB2796tqKgobdmyRW3atJEkJSYm6s4779TRo0cVHh5erG1nZWUpMDBQmZmZCggIKJP9gxP+OBg5MrLgjM6AAY5jdjjDAwDXrOL+flfYAcqHDx9Wamqqunbtam8LDAxUu3bttGHDBknShg0bFBQUZA86ktS1a1e5ublp06ZNl1x3Tk6OsrKyHD6oYI4eLToY+ZZbig5avtRzeAAA+P9V2LCTmpoqSQoNDXVoDw0NtfelpqYqJCTEob9KlSoKDg62z3MxU6ZMUWBgoP0TwdmBisffXwoJKXoGp3DQcmRkQb+/vyurBABUAhU27JSlsWPHKjMz0/5JYfxHxRMYKCUmSmvWFL1UFRFR0J6YWDAfAACXUWFvPQ8LC5MkpaWlqVatWvb2tLQ0tWzZ0j5Penq6w3IXLlzQyZMn7ctfjKenpzw9PUu/aJSuwMBLhxmerwMAKKYKe2anfv36CgsL08qVK+1tWVlZ2rRpk6KjoyVJ0dHRysjI0NatW+3zfPXVV8rPz1e7du3KvWYAAFDxuPTMzqlTp3TgwAH79OHDh7V9+3YFBwerTp06GjVqlF588UU1bNhQ9evX13PPPafw8HD7HVuNGzdWjx499Mgjj2jWrFk6f/68Ro4cqQceeKDYd2IBAABrc2nY+fbbb3X77bfbpxMSEiRJgwYN0rx58/T000/r9OnTGjZsmDIyMtSxY0clJibKy8vLvswHH3ygkSNHqkuXLnJzc1Pfvn315ptvlvu+AACAiqnCPGfHlXjODgAAlU+lf84OAABAaSDsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPslLbMTOno0Yv3HT1a0A8AAMoNYac0ZWZKPXpInTtLKSmOfSkpBe09ehB4AAAoR4Sd0pSdLaWnS4cOSbfd9nvgSUkpmD50qKA/O9uVVQIAcE0h7JSm2rWl1aulyMjfA8/69b8HncjIgv7atV1bJwAA15Aqri7AciIiCgJNYcDp0KGgvTDoRES4sDgAAK49nNkpCxER0oIFjm0LFhB0AABwAcJOWUhJkQYMcGwbMKDooGUAAFDmLBN2ZsyYoXr16snLy0vt2rXT5s2bXVPIHwcjR0ZK69Y5juEh8AAAUK4sEXYWLVqkhIQETZgwQdu2bVOLFi0UExOj9PT08i3k6NGig5FvuaXooOVLPYcHAACUOkuEnddee02PPPKIhgwZoqioKM2aNUs+Pj6aM2dO+Rbi7y+FhBQdjFw4aDkysqDf37986wIA4BpW6e/Gys3N1datWzV27Fh7m5ubm7p27aoNGzaUbzGBgVJiYsFzdP58e3lEhLRmTUHQCQws37oAALiGVfqw88svvygvL0+hoaEO7aGhodqzZ89Fl8nJyVFOTo59Oisrq/QKCgy8dJjh+ToAAJQ7S1zGKqkpU6YoMDDQ/onglnAAACyr0oedGjVqyN3dXWlpaQ7taWlpCgsLu+gyY8eOVWZmpv2Twh1SAABYVqUPOx4eHmrdurVWrlxpb8vPz9fKlSsVHR190WU8PT0VEBDg8AEAANZU6cfsSFJCQoIGDRqkNm3aqG3btpo2bZpOnz6tIUOGuLo0AADgYpYIO/369dOJEyc0fvx4paamqmXLlkpMTCwyaBkAAFx7bMYY4+oiXC0rK0uBgYHKzMzkkhYAAJVEcX+/K/2YHQAAgMsh7AAAAEsj7AAAAEuzxADlq1U4bKlUn6QMAADKVOHv9pWGHxN2JGVnZ0sST1IGAKASys7OVuBl3jvJ3VgqeAjhsWPH5O/vL5vNVqxlsrKyFBERoZSUFO7gKgcc7/LF8S5fHO/yxfEuX2V5vI0xys7OVnh4uNzcLj0yhzM7KnhLem0nX9LJE5jLF8e7fHG8yxfHu3xxvMtXWR3vy53RKcQAZQAAYGmEHQAAYGmEHSd5enpqwoQJ8vT0dHUp1wSOd/nieJcvjnf54niXr4pwvBmgDAAALI0zOwAAwNIIOwAAwNIIOwAAwNIIOwAAwNIIO06YMWOG6tWrJy8vL7Vr106bN292dUmWNWXKFN18883y9/dXSEiI+vTpo71797q6rGvCyy+/LJvNplGjRrm6FEv7+eef9be//U3Vq1eXt7e3mjVrpm+//dbVZVlSXl6ennvuOdWvX1/e3t5q0KCBXnjhhSu+VwnF8/XXX6t3794KDw+XzWbT//3f/zn0G2M0fvx41apVS97e3uratav2799fLrURdkpo0aJFSkhI0IQJE7Rt2za1aNFCMTExSk9Pd3VplrRmzRrFxcVp48aNSkpK0vnz59W9e3edPn3a1aVZ2pYtW/T222+refPmri7F0n777Td16NBBVatW1Zdffqldu3bpn//8p6pVq+bq0izplVde0cyZM/Wvf/1Lu3fv1iuvvKKpU6dq+vTpri7NEk6fPq0WLVpoxowZF+2fOnWq3nzzTc2aNUubNm2Sr6+vYmJidO7cubIvzqBE2rZta+Li4uzTeXl5Jjw83EyZMsWFVV070tPTjSSzZs0aV5diWdnZ2aZhw4YmKSnJdO7c2TzxxBOuLsmynnnmGdOxY0dXl3HN6NWrlxk6dKhD27333mv69+/vooqsS5L57LPP7NP5+fkmLCzMvPrqq/a2jIwM4+npaT788MMyr4czOyWQm5urrVu3qmvXrvY2Nzc3de3aVRs2bHBhZdeOzMxMSVJwcLCLK7GuuLg49erVy+HvOcrGkiVL1KZNG/31r39VSEiIWrVqpXfeecfVZVnWLbfcopUrV2rfvn2SpO+//15r165Vz549XVyZ9R0+fFipqakO/64EBgaqXbt25fL7yYtAS+CXX35RXl6eQkNDHdpDQ0O1Z88eF1V17cjPz9eoUaPUoUMHNW3a1NXlWNJHH32kbdu2acuWLa4u5Zpw6NAhzZw5UwkJCfp//+//acuWLYqPj5eHh4cGDRrk6vIs59lnn1VWVpYaNWokd3d35eXl6aWXXlL//v1dXZrlpaamStJFfz8L+8oSYQeVRlxcnH788UetXbvW1aVYUkpKip544gklJSXJy8vL1eVcE/Lz89WmTRtNnjxZktSqVSv9+OOPmjVrFmGnDHz88cf64IMPtHDhQjVp0kTbt2/XqFGjFB4ezvG2OC5jlUCNGjXk7u6utLQ0h/a0tDSFhYW5qKprw8iRI7V06VKtWrVKtWvXdnU5lrR161alp6frpptuUpUqVVSlShWtWbNGb775pqpUqaK8vDxXl2g5tWrVUlRUlENb48aNlZyc7KKKrG3MmDF69tln9cADD6hZs2YaMGCARo8erSlTpri6NMsr/I101e8nYacEPDw81Lp1a61cudLelp+fr5UrVyo6OtqFlVmXMUYjR47UZ599pq+++kr169d3dUmW1aVLF+3YsUPbt2+3f9q0aaP+/ftr+/btcnd3d3WJltOhQ4cij1LYt2+f6tat66KKrO3MmTNyc3P82XN3d1d+fr6LKrp21K9fX2FhYQ6/n1lZWdq0aVO5/H5yGauEEhISNGjQILVp00Zt27bVtGnTdPr0aQ0ZMsTVpVlSXFycFi5cqM8//1z+/v72a7uBgYHy9vZ2cXXW4u/vX2QslK+vr6pXr84YqTIyevRo3XLLLZo8ebLuv/9+bd68WbNnz9bs2bNdXZol9e7dWy+99JLq1KmjJk2a6LvvvtNrr72moUOHuro0Szh16pQOHDhgnz58+LC2b9+u4OBg1alTR6NGjdKLL76ohg0bqn79+nruuecUHh6uPn36lH1xZX6/lwVNnz7d1KlTx3h4eJi2bduajRs3uroky5J00c/cuXNdXdo1gVvPy95///tf07RpU+Pp6WkaNWpkZs+e7eqSLCsrK8s88cQTpk6dOsbLy8tERkaav//97yYnJ8fVpVnCqlWrLvrv9aBBg4wxBbefP/fccyY0NNR4enqaLl26mL1795ZLbTZjeHQkAACwLsbsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAAAASyPsAEAx5OXlafDgwXryySddXQqAEiLsAEAxuLu7a+7cuYqMjNTPP//s6nIAlABhB0ClsHfvXoWFhSk7O9tlNdhsNsXFxem6665zWQ3lZdasWerdu7erywBKBWEHqARSU1P1+OOPKzIyUp6enoqIiFDv3r0d3iBc0axevVo2m00ZGRmlsr6xY8fq8ccfl7+/f6mszxlTpkyRu7u7Xn31VZfVUF6GDh2qbdu26ZtvvnF1KcBVI+wAFdxPP/2k1q1b66uvvtKrr76qHTt2KDExUbfffrvi4uKcXm9ubu5F28+fP+/0OstKcnKyli5dqsGDB7u0jjlz5ujpp5/WnDlzXFrHlVzquy0JDw8PPfTQQ3rzzTdLoSLAtQg7QAX32GOPyWazafPmzerbt69uuOEGNWnSRAkJCdq4caN9vuTkZN1zzz3y8/NTQECA7r//fqWlpdn7J06cqJYtW+rdd99V/fr15eXlJang0szMmTN19913y9fXVy+99JIk6fPPP9dNN90kLy8vRUZGatKkSbpw4YJ9fTabTe+++67+8pe/yMfHRw0bNtSSJUskFQS022+/XZJUrVo12Ww2e1DJz8/XlClTVL9+fXl7e6tFixb69NNPL3sMPv74Y7Vo0aLI5aO1a9fq1ltvlbe3tyIiIhQfH6/Tp0/b++vVq6cXX3xRAwcOlJ+fn+rWraslS5boxIkT9mPVvHlzffvtt1f8HtasWaOzZ8/q+eefV1ZWltavX+/QX3h858yZozp16sjPz0+PPfaY8vLyNHXqVIWFhSkkJMR+fP94HGfOnKmePXvK29tbkZGRRY5HSkqK7r//fgUFBSk4OFj33HOPfvrpJ3v/4MGD1adPH7300ksKDw/XjTfeWKzlVq9erbZt28rX11dBQUHq0KGDjhw5Yu/v3bu3lixZorNnz17x+AAVWrm8Wx2AU3799Vdjs9nM5MmTLztfXl6eadmypenYsaP59ttvzcaNG03r1q1N586d7fNMmDDB+Pr6mh49epht27aZ77//3hhjjCQTEhJi5syZYw4ePGiOHDlivv76axMQEGDmzZtnDh48aJYvX27q1atnJk6caF+fJFO7dm2zcOFCs3//fhMfH2/8/PzMr7/+ai5cuGAWL15sJJm9e/ea48ePm4yMDGOMMS+++KJp1KiRSUxMNAcPHjRz5841np6eZvXq1Zfcv7vvvts8+uijDm0HDhwwvr6+5vXXXzf79u0z69atM61atTKDBw+2z1O3bl0THBxsZs2aZfbt22dGjBhhAgICTI8ePczHH39s9u7da/r06WMaN25s8vPzL3uMBwwYYJ566iljjDFPPvmkGTp0qEP/hAkTjJ+fn7nvvvvMzp07zZIlS4yHh4eJiYkxjz/+uNmzZ4+ZM2eOkWQ2btzocByrV69u3nnnHbN3714zbtw44+7ubnbt2mWMMSY3N9c0btzYDB061Pzwww9m165d5qGHHjI33nijycnJMcYYM2jQIOPn52cGDBhgfvzxR/Pjjz9ecbnz58+bwMBA89RTT5kDBw6YXbt2mXnz5pkjR47Yazt9+rRxc3Mzq1atuuyxASo6wg5QgW3atMlIMv/5z38uO9/y5cuNu7u7SU5Otrft3LnTSDKbN282xhT8GFetWtWkp6c7LCvJjBo1yqGtS5cuRQLWggULTK1atRyWGzdunH361KlTRpL58ssvjTHGrFq1ykgyv/32m32ec+fOGR8fH7N+/XqHdcfGxpoHH3zwkvvXokUL8/zzzxdZZtiwYQ5t33zzjXFzczNnz541xhSEnb/97W/2/uPHjxtJ5rnnnrO3bdiwwUgyx48fv+T2MzMzjbe3t9m+fbsxxpjvvvvO+Pn5mezsbPs8EyZMMD4+PiYrK8veFhMTY+rVq2fy8vLsbTfeeKOZMmWKfVpSkSDXrl07M2LECGNMwXG/8cYbHcJYTk6O8fb2NsuWLTPGFISd0NBQe/gpznK//vqrkXTZkGmMMdWqVTPz5s277DxARVfFBSeTABSTMaZY8+3evVsRERGKiIiwt0VFRSkoKEi7d+/WzTffLEmqW7euatasWWT5Nm3aOEx///33WrduncMll7y8PJ07d05nzpyRj4+PJKl58+b2fl9fXwUEBCg9Pf2SdR44cEBnzpxRt27dHNpzc3PVqlWrSy539uxZ+2W3P9b4ww8/6IMPPrC3GWOUn5+vw4cPq3HjxkVqDA0NlSQ1a9asSFt6errCwsIuuv0PP/xQDRo0UIsWLSRJLVu2VN26dbVo0SLFxsba56tXr57DAOrQ0FC5u7vLzc3Noe3Pxyg6OrrI9Pbt2+37eeDAgSIDs8+dO6eDBw/ap5s1ayYPDw+H43O55bp3767BgwcrJiZG3bp1U9euXXX//ferVq1aDvN7e3vrzJkzFz0uQGVB2AEqsIYNG8pms2nPnj2lsj5fX99itZ86dUqTJk3SvffeW2TeP4aOqlWrOvTZbDbl5+dfcvunTp2SJH3xxRdFxt94enpecrkaNWrot99+K7Ku4cOHKz4+vsj8derUuWiNNpvtkm2Xq/u9997Tzp07VaXK7/9k5ufna86cOQ5h52LHo6TH6M9OnTql1q1bO4S6Qn8Mrhf7Dq+03Ny5cxUfH6/ExEQtWrRI48aNU1JSktq3b2+f9+TJkxcNyEBlQtgBKrDg4GDFxMRoxowZio+PL/KDlpGRoaCgIDVu3FgpKSlKSUmxn93ZtWuXMjIyFBUVVeLt3nTTTdq7d6+uv/56p2svPMuQl5dnb4uKipKnp6eSk5PVuXPnYq+rVatW2rVrV5Ead+3adVU1FseOHTv07bffavXq1QoODra3nzx5Urfddpv27NmjRo0aXdU2Nm7cqIEDBzpMF57puummm7Ro0SKFhIQoICCg2Oss7nKtWrVSq1atNHbsWEVHR2vhwoX2sHPw4EGdO3fusmfdgMqAu7GACm7GjBnKy8tT27ZttXjxYu3fv1+7d+/Wm2++ab/80bVrVzVr1kz9+/fXtm3btHnzZg0cOFCdO3cucomqOMaPH6/3339fkyZN0s6dO7V792599NFHGjduXLHXUbduXdlsNi1dulQnTpzQqVOn5O/vr6eeekqjR4/W/PnzdfDgQW3btk3Tp0/X/PnzL7mumJgYbdiwwSE4PfPMM1q/fr1Gjhyp7du3a//+/fr88881cuTIEu/v5bz33ntq27atOnXqpKZNm9o/nTp10s0336z33nvvqrfxySefaM6cOdq3b58mTJigzZs32/ejf//+qlGjhu655x598803Onz4sFavXq34+HgdPXr0kuu80nKHDx/W2LFjtWHDBh05ckTLly/X/v377Zf/JOmbb75RZGSkGjRocNX7CLgSYQeo4CIjI7Vt2zbdfvvtevLJJ9W0aVN169ZNK1eu1MyZMyUVXBr5/PPPVa1aNXXq1Eldu3ZVZGSkFi1a5NQ2Y2JitHTpUi1fvlw333yz2rdvr9dff11169Yt9jquu+46TZo0Sc8++6xCQ0PtP94vvPCCnnvuOU2ZMkWNGzdWjx499MUXX6h+/fqXXFfPnj1VpUoVrVixwt7WvHlzrVmzRvv27dOtt96qVq1aafz48QoPD3dqny8mNzdX//73v9W3b9+L9vft21fvv//+VT+baNKkSfroo4/UvHlzvf/++/rwww/tZ+R8fHz09ddfq06dOrr33nvVuHFjxcbG6ty5c5c9Y3Ol5Xx8fLRnzx774wyGDRumuLg4DR8+3L6ODz/8UI888shV7RtQEdhMcUdAAoALzZgxQ0uWLNGyZctcXUqpstls+uyzz9SnTx9Xl+Jg586duuOOO7Rv3z4FBga6uhzgqjBmB0ClMHz4cGVkZCg7O9ulr4y4Vhw/flzvv/8+QQeWwJkdAHChinpmB7ASzuwAgAvx/5tA2WOAMgAAsDTCDgAAsDTCDgAAsDTCDgAAsDTCDgAAsDTCDgAAsDTCDgAAsDTCDgAAsDTCDgAAsLT/D8GDa8idcAfSAAAAAElFTkSuQmCC\n"
          },
          "metadata": {}
        }
      ],
      "source": [
        "# Plotando os pontos dos dados\n",
        "plt.scatter(x_trein, y_trein, marker='x', c='r')\n",
        "# Ajustando o título:\n",
        "plt.title(\"Tensões sobre um resistor\")\n",
        "# Ajustando o rótulo do eixo y\n",
        "plt.ylabel('Tensão (em Volts)')\n",
        "# Ajustando o rótulo do eixo x\n",
        "plt.xlabel('Corrente (em Àmperes)')\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "9f2fd255",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "9f2fd255"
      },
      "source": [
        "## Implementando um modelo\n",
        "\n",
        "O modelo de função para regressão linear (que é a função que faz o mapeamento de `x` para `y`) é representado por\n",
        "\n",
        "$$ f_{w,b}(x^{(i)}) = wx^{(i)} + b \\tag{1}$$\n",
        "\n",
        "A fórmula acima nos mostra a equação da reta: diferentes valores para $w$ e $b$ levam a diferentes retas. <br/> <br/> <br/> <br/> <br/>\n",
        "\n",
        "\n",
        "Vamos tentar ganhar mais intuição usando o código abaixo. Vamos começar com $w = 0$ e $b = 100$.\n",
        "\n",
        "**OBS: Você pode retornar à célula abaixo para ajustar diferentes valores para os parâmetros w e b do modelo**"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 213,
      "id": "f2e9d602",
      "metadata": {
        "pycharm": {
          "name": "#%%\n"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "f2e9d602",
        "outputId": "46f78752-087b-4c9e-c2ef-e818a8be8764"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "w: 50\n",
            "b: 0\n"
          ]
        }
      ],
      "source": [
        "w = 50\n",
        "b = 0\n",
        "print(f\"w: {w}\")\n",
        "print(f\"b: {b}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f183098d",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "f183098d"
      },
      "source": [
        "Agora, vamos computar o valor $f_{w,b}(x^{(i)})$ para os dois dados que temos. Você pode explicitamente escrever:\n",
        "\n",
        "para $x^{(0)}$, `f_wb = w * x[0] + b`\n",
        "\n",
        "para $x^{(1)}$, `f_wb = w * x[1] + b`\n",
        "\n",
        "Para uma grande quantidade de dados, isso pode ser demasiadamente repetitivo. Ao invés disso, você pode usar um loop do tipo `for` conforme mostrado na função `calcula_saida_do_modelo` abaixo.\n",
        "> **OBS**: O argumento `(ndarray (m,))` descreve uma Numpy array de n dimensões da forma (m,). `(scalar)` descreve um argumento sem dimensões, apenas uma magnitude.  \n",
        "> **OBS**: `np.zero(n)` retorna uma numpy array de 1 dimensão com $n$ valores   \n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 214,
      "id": "d3f7b759",
      "metadata": {
        "pycharm": {
          "name": "#%%\n"
        },
        "id": "d3f7b759"
      },
      "outputs": [],
      "source": [
        "def calcula_saida_do_modelo(x, w, b):\n",
        "    \"\"\"\n",
        "    Calcula a previsão para um modelo na forma de reta\n",
        "    Argumentos da função:\n",
        "      x (ndarray (m,)): Conjunto de dados com m amostras\n",
        "      w,b (escalar)   : Parâmetros do modelo\n",
        "    Retorna\n",
        "      y (ndarray (m,)): Previsão de saída\n",
        "    \"\"\"\n",
        "    m = x.shape[0]\n",
        "    f_wb = np.zeros(m)\n",
        "    for i in range(m): # estrutura 'for' em Python\n",
        "        f_wb[i] = w * x[i] + b\n",
        "\n",
        "    return f_wb"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "a27a359f",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "a27a359f"
      },
      "source": [
        "Agora vamos chamar a função `calcula_saida_do_modelo` e plotar o resultado"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 215,
      "id": "4d72a1a5",
      "metadata": {
        "pycharm": {
          "name": "#%%\n"
        },
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 474
        },
        "id": "4d72a1a5",
        "outputId": "a4ffe4bf-705f-4640-9d49-5a32b5668645"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ],
      "source": [
        "f_wb_calculado = calcula_saida_do_modelo(x_trein, w, b,)\n",
        "\n",
        "# Plotando a previsão feita pelo modelo\n",
        "plt.plot(x_trein, f_wb_calculado, c='b',label='Nosso modelo')\n",
        "\n",
        "# Plotando os dados medidos\n",
        "plt.scatter(x_trein, y_trein, marker='x', c='r',label='Valores dos dados')\n",
        "\n",
        "# Definindo o título\n",
        "plt.title(\"Tensões sobre um resistor\")\n",
        "# Ajustando o rótulo do eixo y\n",
        "plt.ylabel('Tensão (em Volts)')\n",
        "# Ajustando o rótulo do eixo x\n",
        "plt.xlabel('Corrente (em Àmperes)')\n",
        "plt.legend()\n",
        "plt.show()\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "3ef91640",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "3ef91640"
      },
      "source": [
        "Como você pode ver, definindo $w = 0$ e $b = 100$ *não* resulta numa reta que se ajusta bem aos nossos dados.\n",
        "\n",
        "### Desafio\n",
        "Tente diferentes valores para $w$ e $b$. Quais seriam os melhores valores para esse conjunto de dados?\n",
        "\n",
        "Qual seria uma possível interpretação física para o parâmetro $w$ nesse exemplo?\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "cef27469",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "cef27469"
      },
      "source": [
        "### Previsão\n",
        "\n",
        "Agora que temos um modelo, podemos usá-lo para fazer uma previsão para um valor diferente de corrente. Vamos estimar a tensão para uma corrente de 2 A.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 217,
      "id": "c3fe4895",
      "metadata": {
        "pycharm": {
          "name": "#%%\n"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "c3fe4895",
        "outputId": "15f89d11-cb2c-420d-bbd6-e57d95462a63"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "100 Volts\n"
          ]
        }
      ],
      "source": [
        "x_i = 2\n",
        "tensao_para_2_amperes = w * x_i + b\n",
        "\n",
        "print(f\"{tensao_para_2_amperes:.0f} Volts\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "31c85d61",
      "metadata": {
        "pycharm": {
          "name": "#%% md\n"
        },
        "id": "31c85d61"
      },
      "source": [
        "# Parabéns!\n",
        "\n",
        "Com este código, você aprendeu:\n",
        " - Que a Regressão Linear constrói um modelo que estabelece uma relação entre as características de entrada e a variável alvo de saída\n",
        "     - No exemplo, a característica de entrada era a corrente e a variável alvo era a tensão sobre o resistor\n",
        "     - Para uma simples regressão linear, o modelo tem dois parâmetros $w$ e $b$ cujos valores são ajustados usando um conjunto de dados de treinamento.\n",
        "     - Uma vez que os parâmetros do modelo foram determinados, o modelo pode ser usado para fazer previsões (estimativas) para novos dados que ainda não haviam sido utilizados anteriormente"
      ]
    },
    {
      "cell_type": "code",
      "source": [],
      "metadata": {
        "id": "jrFTSn3DW8yn"
      },
      "id": "jrFTSn3DW8yn",
      "execution_count": 216,
      "outputs": []
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3 (ipykernel)",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.9.12"
    },
    "toc-autonumbering": false,
    "colab": {
      "provenance": [],
      "include_colab_link": true
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}
